﻿using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using System.Data.SqlClient;

/******************************************************************************************
 ** 文件名：		DataLayer
 ** 创建人：		Tony Mucor
 ** 日期：		2013-07-10
 ** 描述：		所有数据层类的基础类
 *****************************************************************************************/

/// <summary>
/// DataLayer 数据层基础类
/// </summary>
public abstract class DataLayer
{
	#region 属性
	public int nColumnNumber;		// 表的列数
	public string strTableName;		// 表名字
	public string[] arrTableColumnName;	// 表列名字
	public string[] arrTableColumnValue;	// 表列值
	private string strSQL;
	public int nIDNumber;			// 索引ID在数组中的位置
	public int nStatusNumber;		// 状态在数组中的位置
	public Configuration clsConfig;
	public DBOperating clsDB;
	#endregion

	#region 构造函数
	public DataLayer()
	{
		//clsConfig = new Configuration();
		//clsDB = new DBOperating();
	}
	///**********************************************************************************************
	// ** 函数名：	DataLayer
	// ** 功能描述：	构造函数
	// ** 输入参数：	lnColumnNumber		表的列数
	// **		lstrTableName		表名字
	// **		lnIDNumber		索引ID在数组中的位置
	// **		lnStatusNumber		状态在数组中的位置
	// ** 输出参数：
	// ** 返回值：
	// ** 作者：	Tony Mucor
	// ** 日期：	2013-07-10
	// *********************************************************************************************/
	//public DataLayer(string lstrTableName, int lnColumnNumber, int lnIDNumber, int lnStatusNumber)
	//{
	//        nColumnNumber		= lnColumnNumber;
	//        strTableName		= lstrTableName;
	//        nIDNumber		= lnIDNumber;
	//        nStatusNumber		= lnStatusNumber;
	//        arrTableColumnName	= new string[nColumnNumber];
	//        arrTableColumnValue	= new string[nColumnNumber];

	//        clsConfig		= new Configuration();
	//        clsDB			= new DBOperating();
	//}
	#endregion

	#region 方法
	/**********************************************************************************************
	 ** 函数名：	Add
	 ** 功能描述：	添加记录到数据库
	 ** 输入参数：
	 ** 输出参数：
	 ** 返回值：	是否添加成功，成功返回true，否则返回false
	 ** 作者：	Tony Mucor
	 ** 日期：	2013-07-10
	 *********************************************************************************************/
	public Boolean Add()
	{
		int i;
		string strTemp;

		arrTableColumnValue[nStatusNumber] = clsConfig.nNormal.ToString();
		strSQL = "INSERT INTO " + strTableName + " (";
		i = 0;
		strTemp = "";
		while (i < nColumnNumber)
		{
			if (i != nIDNumber)
			{
				strTemp = strTemp + arrTableColumnName[i] + ", ";
			}
			i = i + 1;
		}

		strTemp = CommonFunction.ExceptString(", ", strTemp);
		strSQL = strSQL + strTemp + ") VALUES (";
		strTemp = "";
		i = 0;
		while (i < nColumnNumber)
		{
			if (i != nIDNumber)
			{
				strTemp = strTemp + "'" + arrTableColumnValue[i] + "', ";
			}
			i = i + 1;
		}
		strTemp = CommonFunction.ExceptString(", ", strTemp);
		strSQL = strSQL + strTemp + ")";

		if (clsDB.ExecuteSQL(strSQL) > 0)
		{
			return true;
		}
		else
		{
			return false;
		}

	}

	/**********************************************************************************************
	 ** 函数名：	Modify
	 ** 功能描述：	修改一条记录
	 ** 输入参数：
	 ** 输出参数：
	 ** 返回值：	修改是否成功
	 ** 作者：	Tony Mucor
	 ** 日期：	2013-07-10
	 *********************************************************************************************/
	public Boolean Modify()
	{
		int i;
		string strTemp;

		arrTableColumnValue[nStatusNumber] = clsConfig.nNormal.ToString();
		i = 0;
		strTemp = "";
		while (i < nColumnNumber)
		{
			if (i != nIDNumber)
			{
				strTemp = strTemp + arrTableColumnName[i] + " = " + "'" + arrTableColumnValue[i] + "', ";
			}
			i = i + 1;
		}
		strTemp = CommonFunction.ExceptString(", ", strTemp);
		strSQL = "UPDATE " + strTableName + " SET " +strTemp+ " WHERE " +arrTableColumnName[nIDNumber]+ " = '" +arrTableColumnValue[nIDNumber]+ "' AND " +arrTableColumnName[nStatusNumber]+ " = '" +arrTableColumnValue[nStatusNumber]+ "'";
		if (clsDB.ExecuteSQL(strSQL) > 0)
		{
			return true;
		}
		else
		{
			return false;
		}
	}

	/**********************************************************************************************
	 ** 函数名：	Delete
	 ** 功能描述：	删除一条记录
	 ** 输入参数：
	 ** 输出参数：
	 ** 返回值：	删除是否成功
	 ** 作者：	Tony Mucor
	 ** 日期：	2013-07-10
	 *********************************************************************************************/
	public Boolean Delete()
	{
		arrTableColumnValue[nStatusNumber] = clsConfig.nDelete.ToString();
		strSQL = "UPDATE " +strTableName+ " SET " +arrTableColumnName[nStatusNumber]+ " = '" +arrTableColumnValue[nStatusNumber]+ "' WHERE " +arrTableColumnName[nIDNumber]+ " = '" +arrTableColumnValue[nIDNumber]+ "'";
		if (clsDB.ExecuteSQL(strSQL) > 0)
		{
			return true;
		}
		else
		{
			return false;
		}
	}

	/**********************************************************************************************
	 ** 函数名：	根据查询条件查询，把返回结果放到DataTable中
	 ** 功能描述：
	 ** 输入参数：
	 ** 输出参数：
	 ** 返回值：
	 ** 作者：	Tony Mucor
	 ** 日期：	2013-07-18
	 ** 备注：
	 *********************************************************************************************/
	public DataTable QueryToDataTable(string strSQL)
	{
		return clsDB.QueryDataTable(strSQL);
	}

	/**********************************************************************************************
	 ** 函数名：	QueryOneToDataRow
	 ** 功能描述：	根据ID号查询单一记录，把结果返回到DataRow中
	 ** 输入参数：
	 ** 输出参数：
	 ** 返回值：
	 ** 作者：	Tony Mucor
	 ** 日期：	2013-07-18
	 ** 备注：
	 *********************************************************************************************/
	public DataRow QueryOneToDataRow(int nID)
	{
		string strSQL;
		DataTable dt;

		strSQL = "SELECT * FROM " + strTableName + " WHERE " + arrTableColumnName[nIDNumber] + " = '" + nID.ToString() + "'";
		dt = QueryToDataTable(strSQL);

		if (dt.Rows.Count > 0)
		{
			return dt.Rows[0];
		}
		else
		{
			return null;
		}
	}

	/**********************************************************************************************
	 ** 函数名：	QueryAll
	 ** 功能描述：	查询所有数据，把结果返回到DataTable中
	 ** 输入参数：
	 ** 输出参数：
	 ** 返回值：
	 ** 作者：	Tony Mucor
	 ** 日期：	2013-07-18
	 *********************************************************************************************/
	public DataTable QueryAllToDataTable()
	{
		string strSQL;

		strSQL = "SELECT * FROM " + strTableName + " WHERE " + arrTableColumnName[nStatusNumber] + " = '" + clsConfig.nNormal.ToString() + "'";
		return QueryToDataTable(strSQL);
	}

	#endregion
}
